package cn.tedu.v4;

/**
 * 多线程并发安全问题
 * 当多个线程并发操作同一个资源时候  由于线程切换时机不确定
 * 可能会导致代码执行混乱 而且还有可能出现程序错误  严重时  软件瘫痪【卡死】
 *
 * 客户端   多线程并发  X        服务器    多线程并发    √
 *
 * synchronized   关键字   -----多线程并发     同步锁
 *
 * 使用方法1.同步块方式   最常用
 *        2.同步方法   一个线程执行完毕之后  才能执行下一个
 *
 * 定义语法：synchronized（同步监视器对象）{
 *     需要同步运行的代码块
 * }
 * 案例：去厕所    问题
 *
 *
 */
public class Thread_syn {
    public static void main(String[] args) {
        WC wc=new WC();
        //创建第一个人---线程
        Thread p1=new Thread(()->{
            wc.door();
        });
        Thread p2=new Thread(()->{
            wc.door();
        });
        p1.start();
        p2.start();

    }
}
//创建厕所类
class WC{
    public void door(){
        //线程实例---记录县城信息
        Thread s=Thread.currentThread();
        System.out.println(s.getName()+"去🚾");

        try {
            //同步锁     门加一把锁
            //多线程执行   同步锁  每次只放一个线程
            synchronized (this) {
                Thread.sleep(5000);
                System.out.println(s.getName() + "找🚪进去");
            }
            Thread.sleep(3000);
            System.out.println(s.getName()+"穿👗走人");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
































